<?php

/**
 * Проверяет уникальность логина. Такая хитрая реализация — для того, чтобы
 * в наследниках можно было дополнительно определять параметры найденной
 * существующей учетной записи.
 *
 */
class Security_Validator_Login extends Kernel_Validator_Abstract {

    /**
     * Сообщение (или шаблон сообщения) об ошибке, которое бросает валидатор.
     *
     * @var string
     */
    public $message = 'VALIDATION_ERROR_LOGIN_EXISTS';

    /**
     * Идентификатор субъекта, логин которого нужно проверить.
     *
     * @var integer
     */
    public $subject;

    /**
     * Проверяет правильность указанного значения
     *
     * @param   mixed   $value
     * @return  boolean
     */
    protected function _isValid($value) {
        return !$this->_getAccountId($value);
    }

    /**
     * Возвращает идентификатор учетной записи, соответствующей указанному e-mail.
     *
     * @param   mixed   $value
     * @return  integer
     */
    protected function _getAccountId($email) {
        $query = 'SELECT
                         `id`
                    FROM
                         `system_subject`
                   WHERE
                         `email` = "' . database::escape($email) . '"';
        return !in_array($account_id = database::fetchOne($query),
            array(null, $this->subject)) ? $account_id : null;
    }
}
